from typing import Optional
import json

DEFAULT_SETTINGS_PATH = './settings.json'


class Settings:
    """
    Настройки программы
    """

    ym_token: Optional[str]
    update_time: float = 30
    client_id: int

    def __init__(self, path: str = DEFAULT_SETTINGS_PATH) -> None:
        """
        Инициализировать класс

        Args:
            path (str, optional): Путь к настройкам. Defaults to DEFAULT_SETTINGS_PATH.

        Raises:
            Exception: Время обновления данных не может быть менее 15 секунд.
        """

        # Открытие файла
        with open(path, 'r') as f:
            # Получение данных из файла
            settings_data = json.load(f)

            # Ставим эти данные
            self.ym_token = settings_data.get('ym_token')
            self.update_time = settings_data.get('update_time')
            self.client_id = settings_data.get('client_id')
            self.ym_icon = settings_data.get('ym_icon')

            # Если update_time больше 5
            if self.update_time < 5:
                raise Exception(
                    'Время обновления данных не может быть менее 5 секунд.')

    @staticmethod
    def create_default_settings() -> None:
        """
        Создание настроек по умолчанию
        """

        # Настройки по умолчанию 
        default_settings = {
            'ym_token': None,
            'update_time': 5,
            'client_id': 978590809312075777,
            'ym_icon': 'https://rskrf.ru/upload/iblock/087/08775527999b3625409188704ce7f546.png'
        }

        # Записи их
        with open(DEFAULT_SETTINGS_PATH, 'w') as f:
            json.dump(default_settings, f)

    def save_settings(self, path: str = DEFAULT_SETTINGS_PATH) -> None:
        """
        Cохранение настроек

        Args:
            path (str, optional): Путь к настройкам. Defaults to DEFAULT_SETTINGS_PATH.
        """

        # Получение настроек
        current_settings = {
            'ym_token': self.ym_token,
            'update_time': self.update_time,
            'client_id': self.client_id,
            'ym_icon': self.ym_icon
        }

        # Cохранение настроек
        with open(path, 'w') as f:
            json.dump(current_settings, f)
